/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ugc.cnel.manabi.bakenbeans;

import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.selectinputtext.SelectInputText;
import com.icesoft.faces.context.FileResource;
import com.icesoft.faces.context.effects.Highlight;
import com.icesoft.faces.context.effects.JavascriptContext;
import java.io.File;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.MimetypesFileTypeMap;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;
import javax.persistence.Query;
import org.ugc.cnel.manabi.entidades.Adjuntos;
import org.ugc.cnel.manabi.entidades.Agencia;
import org.ugc.cnel.manabi.entidades.Campo;
import org.ugc.cnel.manabi.entidades.Cliente;
import org.ugc.cnel.manabi.entidades.Inspeccion;
import org.ugc.cnel.manabi.entidades.Inspector;
import org.ugc.cnel.manabi.entidades.Liquidador;
import org.ugc.cnel.manabi.entidades.Motivo;
import org.ugc.cnel.manabi.entidades.Novedad;
import org.ugc.cnel.manabi.entidades.Servicio;
import org.ugc.cnel.manabi.entidades.TempUpload;
import org.ugc.cnel.manabi.jpa.AdjuntosJpaController;
import org.ugc.cnel.manabi.jpa.AgenciaJpaController;
import org.ugc.cnel.manabi.jpa.CampoJpaController;
import org.ugc.cnel.manabi.jpa.CiudadJpaController;
import org.ugc.cnel.manabi.jpa.ClienteJpaController;
import org.ugc.cnel.manabi.jpa.InspeccionJpaController;
import org.ugc.cnel.manabi.jpa.InspectorJpaController;
import org.ugc.cnel.manabi.jpa.LiquidadorJpaController;
import org.ugc.cnel.manabi.jpa.MotivoJpaController;
import org.ugc.cnel.manabi.jpa.NovedadJpaController;
import org.ugc.cnel.manabi.jpa.ServicioJpaController;
import org.ugc.cnel.manabi.jpa.TempUploadJpaController;
import org.ugc.cnel.manabi.jpa.exceptions.IllegalOrphanException;
import org.ugc.cnel.manabi.jpa.exceptions.NonexistentEntityException;
import org.ugc.cnel.manabi.jpa.exceptions.PreexistingEntityException;
import org.ugc.cnel.manabi.recursos.Utilidades;

/**
 *
 * @author Admin
 */
public class inspeccionBakenBean {

    private List datos = new ArrayList();
    private final ClienteJpaController clijpa;
    private final ServicioJpaController servjpa;
    private final InspectorJpaController inspectorjpa;
    private final AgenciaJpaController agenciajpa;
    private final CampoJpaController campojpa;
    private final MotivoJpaController motivojpa;
    private final NovedadJpaController novedadjpa;
    private final LiquidadorJpaController liquidadorjpa;
    private Servicio serv;
    private String tipo_busqueda = "1";
    private SelectInputText auto_completar;
    private navegacionBakenBean nav;
    private eventosBakenBean ventana;
    private List<SelectItem> inspectores;
    private String id_inspector;
    private List<SelectItem> agencias;
    private String id_agencia;
    private List<SelectItem> campos;
    private String id_campo;
    private List<SelectItem> motivos;
    private String id_motivo;
    private List<SelectItem> novedades;
    private String id_novedad;
    private Date fecha_inspeccion = new Date();
    private List<SelectItem> liquidadores;
    private String id_liquidador = "0";
    private List<ResourceBean> tempuploadlist;
    private Servicio servicio_seleccionado;
    private List<Object> lista;
    /** Componentes HTML **/
    private HtmlInputText txt_cod_servicio, txt_det_servicio, txt_tip_servicio;
    private HtmlInputText txt_nombres, txt_ciudad, txt_cedula, txt_direccion;
    private HtmlInputText txt_sello_encontro, txt_sello_dejo, txt_recu_neta, txt_recu_acu;
    private HtmlInputTextarea txt_observacion;
    private final InspeccionJpaController inspeccionjpa;
    private final SesionBean sesionbean;
    private final TempUploadJpaController tempupload;
    private final AdjuntosJpaController adjuntosjpa;
    private int n_registros;
    private int n_fila;
    private String criterio = "";
    private opcion_buqueda opt_busqueda = opcion_buqueda.codigo_inspeccion;
    private boolean edit = false;
    public Inspeccion insp_selected = null;

    public enum opcion_buqueda {

        codigo_inspeccion,
        nombre_cliente,
        cedula_ruc,
        codigo_servicio,
        numero_medidor
    }

    public Servicio getServ() {
        return serv;
    }

    public void setServ(Servicio serv) {
        this.serv = serv;
    }

    public List getDatos() {
        return datos;
    }

    public void setDatos(List datos) {
        this.datos = datos;
    }

    public String getTipo_busqueda() {
        return tipo_busqueda;
    }

    public void setTipo_busqueda(String tipo_busqueda) {
        this.tipo_busqueda = tipo_busqueda;
    }

    public SelectInputText getAuto_completar() {
        return auto_completar;
    }

    public void setAuto_completar(SelectInputText auto_completar) {
        this.auto_completar = auto_completar;
    }

    public navegacionBakenBean getNav() {
        return nav;
    }

    public void setNav(navegacionBakenBean nav) {
        this.nav = nav;
    }

    public eventosBakenBean getVentana() {
        return ventana;
    }

    public void setVentana(eventosBakenBean ventana) {
        this.ventana = ventana;
    }

    public HtmlInputText getTxt_cod_servicio() {
        return txt_cod_servicio;
    }

    public void setTxt_cod_servicio(HtmlInputText txt_cod_servicio) {
        this.txt_cod_servicio = txt_cod_servicio;
    }

    public HtmlInputText getTxt_det_servicio() {
        return txt_det_servicio;
    }

    public void setTxt_det_servicio(HtmlInputText txt_det_servicio) {
        this.txt_det_servicio = txt_det_servicio;
    }

    public HtmlInputText getTxt_tip_servicio() {
        return txt_tip_servicio;
    }

    public void setTxt_tip_servicio(HtmlInputText txt_tip_servicio) {
        this.txt_tip_servicio = txt_tip_servicio;
    }

    public HtmlInputText getTxt_cedula() {
        return txt_cedula;
    }

    public void setTxt_cedula(HtmlInputText txt_cedula) {
        this.txt_cedula = txt_cedula;
    }

    public HtmlInputText getTxt_ciudad() {
        return txt_ciudad;
    }

    public void setTxt_ciudad(HtmlInputText txt_ciudad) {
        this.txt_ciudad = txt_ciudad;
    }

    public HtmlInputText getTxt_direccion() {
        return txt_direccion;
    }

    public void setTxt_direccion(HtmlInputText txt_direccion) {
        this.txt_direccion = txt_direccion;
    }

    public HtmlInputText getTxt_nombres() {
        return txt_nombres;
    }

    public void setTxt_nombres(HtmlInputText txt_nombres) {
        this.txt_nombres = txt_nombres;
    }

    public List<SelectItem> getInspectores() {
        setInspectores(getlistainsp());
        return inspectores;

    }

    public void setInspectores(List<SelectItem> inspectores) {
        this.inspectores = inspectores;
    }

    public List<SelectItem> getAgencias() {
        setAgencias(getlistagen());
        return agencias;
    }

    public void setAgencias(List<SelectItem> agencias) {
        this.agencias = agencias;
    }

    public List<SelectItem> getCampos() {
        setCampos(getlistacampo());
        return campos;
    }

    public void setCampos(List<SelectItem> campos) {
        this.campos = campos;
    }

    public List<SelectItem> getMotivos() {
        setMotivos(getlistamotivo());
        return motivos;
    }

    public void setMotivos(List<SelectItem> motivos) {
        this.motivos = motivos;
    }

    public List<SelectItem> getNovedades() {
        setNovedades(getlistanovedad());
        return novedades;
    }

    public void setNovedades(List<SelectItem> novedades) {
        this.novedades = novedades;
    }

    public Date getFecha_inspeccion() {
        return fecha_inspeccion;
    }

    public void setFecha_inspeccion(Date fecha_inspeccion) {
        this.fecha_inspeccion = fecha_inspeccion;
    }

    public List<SelectItem> getLiquidadores() {
        setLiquidadores(getliquidador());
        return liquidadores;
    }

    public void setLiquidadores(List<SelectItem> liquidadores) {
        this.liquidadores = liquidadores;
    }

    public HtmlInputText getTxt_sello_encontro() {
        return txt_sello_encontro;
    }

    public void setTxt_sello_encontro(HtmlInputText txt_sello_encontro) {
        this.txt_sello_encontro = txt_sello_encontro;
    }

    public HtmlInputText getTxt_sello_dejo() {
        return txt_sello_dejo;
    }

    public void setTxt_sello_dejo(HtmlInputText txt_sello_dejo) {
        this.txt_sello_dejo = txt_sello_dejo;
    }

    public HtmlInputText getTxt_recu_neta() {
        return txt_recu_neta;
    }

    public void setTxt_recu_neta(HtmlInputText txt_recu_neta) {
        this.txt_recu_neta = txt_recu_neta;
    }

    public HtmlInputText getTxt_recu_acu() {
        return txt_recu_acu;
    }

    public void setTxt_recu_acu(HtmlInputText txt_recu_acu) {
        this.txt_recu_acu = txt_recu_acu;
    }

    public HtmlInputTextarea getTxt_observacion() {
        return txt_observacion;
    }

    public void setTxt_observacion(HtmlInputTextarea txt_observacion) {
        this.txt_observacion = txt_observacion;
    }

    public Servicio getServicio_seleccionado() {
        return servicio_seleccionado;
    }

    public void setServicio_seleccionado(Servicio servicio_seleccionado) {
        this.servicio_seleccionado = servicio_seleccionado;
    }

    public List<ResourceBean> getTempuploadlist() {
        //Asignacion de la Tabla de UploaDS TEMPORALES
        setTempuploadlist(getuploadtemp());
        return tempuploadlist;
    }

    public void setTempuploadlist(List<ResourceBean> tempuploadlist) {
        this.tempuploadlist = tempuploadlist;
    }

    public String getId_agencia() {
        return id_agencia;
    }

    public void setId_agencia(String id_agencia) {
        this.id_agencia = id_agencia;
    }

    public String getId_campo() {
        return id_campo;
    }

    public void setId_campo(String id_campo) {
        this.id_campo = id_campo;
    }

    public String getId_inspector() {
        return id_inspector;
    }

    public void setId_inspector(String id_inspector) {
        this.id_inspector = id_inspector;
    }

    public String getId_liquidador() {
        return id_liquidador;
    }

    public void setId_liquidador(String id_liquidador) {
        this.id_liquidador = id_liquidador;
    }

    public String getId_motivo() {
        return id_motivo;
    }

    public void setId_motivo(String id_motivo) {
        this.id_motivo = id_motivo;
    }

    public String getId_novedad() {
        return id_novedad;
    }

    public void setId_novedad(String id_novedad) {
        this.id_novedad = id_novedad;
    }

    public List<Object> getLista() {
        //setLista(obtener_lista(n_registros, n_fila));
        return lista;
    }

    public void setLista(List<Object> lista) {
        this.lista = lista;
    }

    public int getN_fila() {
        return n_fila;
    }

    public void setN_fila(int n_fila) {
        this.n_fila = n_fila;
    }

    public int getN_registros() {
        return n_registros;
    }

    public void setN_registros(int n_registros) {
        this.n_registros = n_registros;
    }

    public String getCriterio() {
        return criterio;
    }

    public void setCriterio(String criterio) {
        this.criterio = criterio;
    }

    /** Creates a new instance of inspeccionBakenBean */
    public inspeccionBakenBean() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        clijpa = (ClienteJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "ClienteJPA");
        servjpa = (ServicioJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "ServicioJPA");
        inspectorjpa = (InspectorJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "inspectorJPA");
        agenciajpa = (AgenciaJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "AgenciaJPA");
        campojpa = (CampoJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "CampoJPA");
        motivojpa = (MotivoJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "MotivoJPA");
        novedadjpa = (NovedadJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "NovedadJPA");
        liquidadorjpa = (LiquidadorJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "LiquidadorJPA");
        inspeccionjpa = (InspeccionJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "InspeccionJPA");
        sesionbean = (SesionBean) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "SesionBean");
        tempupload = (TempUploadJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "tempuploadJPA");
        adjuntosjpa = (AdjuntosJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "AdjuntosJPA");
        if (n_fila == 0 && n_registros == 0) {
            n_fila = 0;
            n_registros = 10;
        }
        setLista(obtener_lista(n_fila, n_registros));
    }

    public void refrescar_lista() {
        setLista(obtener_lista(n_fila, n_fila));
    }

    private List<Object> obtener_lista(int maximo, int desde) {
        List<Object> lista_obj = new ArrayList();
        List<Inspeccion> insp = inspeccionjpa.findInspeccionEntities();
        for (Inspeccion inspeccion : insp) {
            lista_obj.add(new Object[]{inspeccion, new AgenciaJpaController().findAgencia(inspeccion.getIdAgencia())});
        }
        return lista_obj;
    }

    private List<ResourceBean> getuploadtemp() {
        List<TempUpload> lista_loc = tempupload.getEntityManager().createNamedQuery("TempUpload.findBySessionId").setParameter("sessionId", Utilidades.getSessionID()).getResultList();
        List<ResourceBean> lrb = new ArrayList<ResourceBean>();
        for (TempUpload tempUpload : lista_loc) {
            ResourceBean rb = new ResourceBean(new FileResource(new File(tempUpload.getRuta())), tempUpload.getRuta(), tempUpload);
            lrb.add(rb);
        }
        return lrb;
    }

    private List<SelectItem> getliquidador() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        for (Liquidador obj_liquidador : liquidadorjpa.findLiquidadorEntities()) {
            if (obj_liquidador.getEstado().booleanValue()) {
                list.add(new SelectItem(obj_liquidador.getId(), obj_liquidador.getDescripcion()));
            }
        }
        return list;
    }

    private List<SelectItem> getlistanovedad() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        for (Novedad obj_novedad : novedadjpa.findNovedadEntities()) {
            if (obj_novedad.getEstado()) {
                list.add(new SelectItem(obj_novedad.getId(), obj_novedad.getDescripcion()));
            }
        }
        return list;
    }

    private List<SelectItem> getlistamotivo() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        for (Motivo obj_motivo : motivojpa.findMotivoEntities()) {
            if (obj_motivo.getEstado().booleanValue()) {
                list.add(new SelectItem(obj_motivo.getId(), obj_motivo.getDescripcion()));
            }
        }
        return list;
    }

    private List<SelectItem> getlistacampo() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        for (Campo obj_campo : campojpa.findCampoEntities()) {
            if (obj_campo.getEstado()) {
                list.add(new SelectItem(obj_campo.getId(), obj_campo.getDescripcion()));
            }
        }

        return list;
    }

    private List<SelectItem> getlistagen() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        for (Agencia obj_agen : agenciajpa.findAgenciaEntities()) {
            list.add(new SelectItem(obj_agen.getId(), obj_agen.getNombre()));
        }
        return list;
    }

    private List<SelectItem> getlistainsp() {
        List<SelectItem> lista_loc = new ArrayList<SelectItem>();
        for (Inspector obj_ins : inspectorjpa.findInspectorEntities()) {
            if (obj_ins.getEstado()) {
                lista_loc.add(new SelectItem(obj_ins.getId(), obj_ins.getNombres() + " " + obj_ins.getApellidos()));
            }
        }
        return lista_loc;
    }

    public void evt_change_text_bus2(ValueChangeEvent evt) {
        FacesContext context = FacesContext.getCurrentInstance();
        Object criterio_loc = evt.getNewValue();
        // Si el criterio es menor que 3 entonces salir del evento

        if (getAuto_completar().getSelectedItem() != null) {
            //Cargar los datos en el formulario
            Servicio srv = (Servicio) getAuto_completar().getSelectedItem().getValue();
            if (srv.getInspeccionCollection().size() == 0) {
                FacesMessage message = new FacesMessage();
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
                message.setSummary("EL Servicio " + srv.getCodigoServicio() + " no posee inspecciones");
                message.setDetail("EL Servicio " + srv.getCodigoServicio() + " no posee inspecciones");
                context.addMessage("form_sistema:auto_completar", message);
                //Clear busquedas
                servicio_seleccionado = null;
                return;
            }
            setServicio_seleccionado(srv);
            return;
        }
        if ((criterio_loc.toString().length() < 3)) {
            return;
        }
        //Limpiar la lista
        getDatos().removeAll(datos);
        String query = "";

        int busqueda = Integer.parseInt(getTipo_busqueda());
        switch (busqueda) {
            case 1:
                query = "select s from Servicio s join s.idCliente c WHERE c.cedularuc like :cedula";
                break;
            case 2:
                query = "select s from Servicio s join s.idCliente c WHERE c.nombre like :nombre";
                break;
            case 3:
                query = "select s from Servicio s join s.idCliente c WHERE lower(c.localDir) like :direccion";
                break;
            case 4:
                query = "select s from Servicio s join s.idCliente c WHERE s.nMedidor = :medidor";
                break;
            case 5:
                query = "select s from Servicio s join s.idCliente c WHERE s.codigoServicio = :codigo";
                break;
        }

        Query consulta = servjpa.getEntityManager().createQuery(query);
        switch (busqueda) {
            case 1:
                consulta.setParameter("cedula", "%" + criterio_loc.toString() + "%");
                break;
            case 2:
                consulta.setParameter("nombre", "%" + criterio_loc.toString().toUpperCase() + "%");
                break;
            case 3:
                consulta.setParameter("direccion", "%" + criterio_loc.toString().toLowerCase() + "%");
                break;
            case 4:
                consulta.setParameter("medidor", Integer.parseInt(criterio_loc.toString()));
                break;
            case 5:
                consulta.setParameter("codigo", Integer.parseInt(criterio_loc.toString()));
                break;
        }

        List<Servicio> servicios = consulta.getResultList();
        for (Servicio servicio : servicios) {
            this.datos.add(new SelectItem(servicio, servicio.getIdCliente().getNombre() + " [Servicio=" + servicio.getCodigoServicio() + "]"));
        }

    }

    public void evt_change_text_bus(ValueChangeEvent evt) {
        Object criterio_loc = evt.getNewValue();
        // Si el criterio es menor que 3 entonces salir del evento

        if (getAuto_completar().getSelectedItem() != null) {
            //Cargar los datos en el formulario
            setServicio_seleccionado((Servicio) getAuto_completar().getSelectedItem().getValue());
            load_data((Servicio) getAuto_completar().getSelectedItem().getValue());
            return;
        }
        if ((criterio_loc.toString().length() < 3)) {
            return;
        }
        //Limpiar la lista
        getDatos().removeAll(datos);
        String query = "";

        int busqueda = Integer.parseInt(getTipo_busqueda());
        switch (busqueda) {
            case 1:
                query = "select s from Servicio s join s.idCliente c WHERE c.cedularuc like :cedula";
                break;
            case 2:
                query = "select s from Servicio s join s.idCliente c WHERE c.nombre like :nombre";
                break;
            case 3:
                query = "select s from Servicio s join s.idCliente c WHERE lower(c.localDir) like :direccion";
                break;
            case 4:
                query = "select s from Servicio s join s.idCliente c WHERE s.nMedidor = :medidor";
                break;
            case 5:
                query = "select s from Servicio s join s.idCliente c WHERE s.codigoServicio = :codigo";
                break;
        }

        Query consulta = servjpa.getEntityManager().createQuery(query);
        switch (busqueda) {
            case 1:
                consulta.setParameter("cedula", "%" + criterio_loc.toString() + "%");
                break;
            case 2:
                consulta.setParameter("nombre", "%" + criterio_loc.toString().toUpperCase() + "%");
                break;
            case 3:
                consulta.setParameter("direccion", "%" + criterio_loc.toString().toLowerCase() + "%");
                break;
            case 4:
                consulta.setParameter("medidor", Integer.parseInt(criterio_loc.toString()));
                break;
            case 5:
                consulta.setParameter("codigo", Integer.parseInt(criterio_loc.toString()));
                break;
        }

        List<Servicio> servicios = consulta.getResultList();
        for (Servicio servicio : servicios) {
            this.datos.add(new SelectItem(servicio, servicio.getIdCliente().getNombre() + " [Servicio=" + servicio.getCodigoServicio() + "]"));
        }
    }

    public void change_evt_cmb_bus_edit(ValueChangeEvent evt) {
        //System.out.println(evt.getNewValue());
        int opcion = Integer.parseInt(evt.getNewValue().toString());
        switch (opcion) {
            case 1:
                this.opt_busqueda = opcion_buqueda.codigo_inspeccion;
                break;
            case 2:
                this.opt_busqueda = opt_busqueda.nombre_cliente;
                break;
            case 3:
                this.opt_busqueda = opcion_buqueda.cedula_ruc;
                break;
            case 4:
                this.opt_busqueda = opcion_buqueda.codigo_servicio;
                break;
            default:
                this.opt_busqueda = opt_busqueda.numero_medidor;
                break;
        }
    }

    public void load_data(Servicio servicio) {
        //Cargar datos del servicio
        txt_cod_servicio.setSubmittedValue(String.valueOf(servicio.getCodigoServicio()));
        txt_det_servicio.setSubmittedValue(servicio.getDetalleServicio());
        txt_tip_servicio.setSubmittedValue(servicio.getIdTipoServicio().getDetalle());
        //Cargar datos del Cliente
        txt_nombres.setSubmittedValue(servicio.getIdCliente().getNombre());
        txt_cedula.setSubmittedValue(servicio.getIdCliente().getCedularuc());
        txt_ciudad.setSubmittedValue(new CiudadJpaController().findCiudad(servicio.getIdCliente().getIdCiudad()).getNombre());
        txt_direccion.setSubmittedValue(servicio.getIdCliente().getDireccion());


    }

    public void cambiar_combo(ValueChangeEvent evt) {
        getAuto_completar().setValid(true);

        getAuto_completar().resetValue();
        getAuto_completar().setSubmittedValue("");
        getAuto_completar().requestFocus();
        setTipo_busqueda(evt.getNewValue().toString());
        try {
            limpiar_formulario();
        } catch (Exception ex) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        limpiar_adjuntos();
        //Limpiar Mensajes
        Iterator<FacesMessage> it_msg = FacesContext.getCurrentInstance().getMessages(getAuto_completar().getClientId(FacesContext.getCurrentInstance()));
        //Iterator<FacesMessage> it_msg = FacesContext.getCurrentInstance().getMessages();
        while (it_msg.hasNext()) {
            it_msg.next();
            it_msg.remove();
            FacesContext.getCurrentInstance().renderResponse();
        }

    }

    public void validar_seleccion(FacesContext context, UIComponent validate, Object value) {
        int tipo = Integer.parseInt(getTipo_busqueda());
        //Si hay item seleccionado tonces no validar
        if (getServicio_seleccionado() != null || getAuto_completar().getSelectedItem() != null) {
            return;
        }

        switch (tipo) {
            //Cedula verificar la longitud no mayor a 13 y solo numeros
            case 1:
                //String regex = "[0-9]{13}|[0-9]{10}";
                String regex = "\\d*";
                String cedula = (String) value;
                Pattern patron = Pattern.compile(regex);
                Matcher encaja = patron.matcher(cedula);
                if (!encaja.matches()) {
                    ((UIInput) validate).setValid(false);
                    FacesMessage msg = new FacesMessage("* Cedula Incorrecta Ingrese solo Números");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage(validate.getClientId(context), msg);
                    throw new ValidatorException(msg);
                }
                break;
            //Verificar que no hagan injection sql o no ingresar longitud 0
            case 2:
                String nombre = (String) value;
                if (nombre.length() < 0) {
                    ((UIInput) validate).setValid(false);
                    FacesMessage msg = new FacesMessage("* Longitud invalida");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage(validate.getClientId(context), msg);
                    throw new ValidatorException(msg);
                }
                break;
            case 3:
                String direccion = (String) value;
                if (direccion.length() < 0) {
                    ((UIInput) validate).setValid(false);
                    FacesMessage msg = new FacesMessage("* Longitud invalida");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage(validate.getClientId(context), msg);
                    throw new ValidatorException(msg);
                }
                break;
            case 4:
                //Medidor solo numeros
                String medidor_cad = (String) value;
                if (!Pattern.matches("\\d*", medidor_cad)) {
                    ((UIInput) validate).setValid(false);
                    FacesMessage msg = new FacesMessage("* Ingrese solo numeros");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage(validate.getClientId(context), msg);
                    throw new ValidatorException(msg);
                }
                break;
            case 5:
                //Medidor solo numeros
                String cod_servicio = (String) value;
                if (!Pattern.matches("\\d*", cod_servicio)) {
                    ((UIInput) validate).setValid(false);
                    FacesMessage msg = new FacesMessage("* Ingrese solo numeros");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage(validate.getClientId(context), msg);
                    throw new ValidatorException(msg);
                }
                break;
        }
    }

    public void nuevo(ActionEvent evt) {
        try {
            //TODO:Implementar el metodo de nueva inspeccion
            limpiar_formulario();
            setServicio_seleccionado(null);
            getAuto_completar().requestFocus();
        } catch (Exception ex) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, "Error al Limpiar Formulario", ex);
        }
    }

    public void limpiar_formulario() throws Exception {
        id_inspector = "";
        id_campo = "";
        id_agencia = "";
        id_motivo = "";
        id_novedad = "";
        id_liquidador = "";
        criterio = "";
        this.opt_busqueda = opcion_buqueda.codigo_inspeccion;
        //clear Filtros;
        if (servicio_seleccionado != null) {
            servicio_seleccionado = null;
        }
        refrescar_lista();

        try {
            getAuto_completar().setSubmittedValue("");
            getTxt_cedula().setSubmittedValue("");
            getTxt_ciudad().setSubmittedValue("");
            getTxt_cod_servicio().setSubmittedValue("");
            getTxt_det_servicio().setSubmittedValue("");
            getTxt_direccion().setSubmittedValue("");
            getTxt_nombres().setSubmittedValue("");
            getTxt_tip_servicio().setSubmittedValue("");
            getTxt_sello_dejo().setSubmittedValue("");
            getTxt_sello_encontro().setSubmittedValue("");
            getTxt_observacion().setSubmittedValue("");
            getTxt_recu_neta().setSubmittedValue("");
            getTxt_recu_acu().setSubmittedValue("");

            //System.out.println(FacesContext.getCurrentInstance().getViewRoot().findComponent("form_sistema:combos"));
            for (Object object : FacesContext.getCurrentInstance().getViewRoot().findComponent("form_sistema:tabs:combos").getChildren()) {
                if (object instanceof HtmlSelectOneMenu) {
                    ((HtmlSelectOneMenu) object).setSubmittedValue("");

                }
            }
            limpiar_adjuntos();
        } catch (Exception e) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.INFO, "Componentes aun no renderizados");
            //throw new Exception("Componentes aun no renderizados");
        }

    }

    public void guardar(ActionEvent evt) {
        try {
            // No guardar nada.... si no esta seleccionado un servicio al cual se va aplicar la inspeccion
            if (getServicio_seleccionado() == null) {
                return;
            }
            Inspeccion inspeccion = new Inspeccion();
            //setter del objeto Inspeccion
            inspeccion.setFechaInspeccion(getFecha_inspeccion());
            inspeccion.setFechaRegistro(new Date());
            inspeccion.setIdAgencia(Integer.valueOf(this.id_agencia));
            inspeccion.setIdCampo(campojpa.findCampo(Integer.valueOf(this.id_campo)));
            inspeccion.setIdCliente(getServicio_seleccionado().getIdCliente());
            inspeccion.setIdInspector(inspectorjpa.findInspector(Integer.valueOf(this.id_inspector)));
            this.id_liquidador = (this.id_liquidador.isEmpty() ? "0" : this.id_liquidador);
            inspeccion.setIdLiquidador(liquidadorjpa.findLiquidador(Integer.valueOf(this.id_liquidador)));
            inspeccion.setIdMotivo(motivojpa.findMotivo(Integer.valueOf(this.id_motivo)));
            inspeccion.setIdNovedad(novedadjpa.findNovedad(Integer.valueOf(this.id_novedad)));
            inspeccion.setIdServicio(getServicio_seleccionado());
            inspeccion.setIdUsuario(sesionbean.getUsu_login());
            inspeccion.setObservaciones(getTxt_observacion().getValue().toString());
            if (this.txt_recu_acu.getValue()!= null) {
                inspeccion.setRecuAcumulada(Double.valueOf(getTxt_recu_acu().getValue().toString()));
                inspeccion.setRecuNeta(Double.valueOf(getTxt_recu_neta().getValue().toString()));
            } else {
                inspeccion.setRecuAcumulada(Double.valueOf(0));
                inspeccion.setRecuNeta(Double.valueOf(0));
            }
            inspeccion.setSelloDejo(Integer.valueOf(getTxt_sello_dejo().getValue().toString()));
            inspeccion.setSelloEncontro(Integer.valueOf(getTxt_sello_dejo().getValue().toString()));
            inspeccion.setAdjuntosCollection(new ArrayList<Adjuntos>());
            inspeccion = inspeccionjpa.create(inspeccion);
            //inspeccion.setId(new Integer(inspeccionjpa.getInspeccionCount()));
            //Grabar los archivos adjuntos
            if (tempuploadlist != null) {
                if (tempuploadlist.size() != 0) {
                    for (ResourceBean rb : tempuploadlist) {
                        String tipo = new MimetypesFileTypeMap().getContentType(rb.getFileName());
                        Adjuntos adj = new Adjuntos(0, rb.getFileName(), tipo, rb.getTemporal().getNombreArchivo());
                        adj.setIdInspeccion(inspeccion);
                        //guardar en Tabla
                        adj = adjuntosjpa.create(adj);

                        //Renombrar Archivos
                        File archivo = new File(rb.getFileName());
                        int dotPos = rb.getFileName().lastIndexOf(".");
                        String extension = rb.getFileName().substring(dotPos);

                        String renombrado = archivo.getParent() + "\\" + adj.toString() + extension;
                        boolean pudo = archivo.renameTo(new File(renombrado));
                        if (pudo) {
                            adj.setNombre(renombrado);
                            adjuntosjpa.edit(adj);
                        } else {
                            throw new Exception("Error al renombrar archivo ....");
                        }

                    }
                }
            }

            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Inspeccion Guardada Correctamente");
            ventana.setPopup_conten("Se ha guardado la inspeccion N:" + inspeccion.getId() + " para el Sr: " + inspeccion.getIdCliente().getNombre() + " con el Servicio[" + inspeccion.getIdServicio().getCodigoServicio() + "]");
            ventana.setPopup_visible(true);
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.INFO, "Se ha guardado la inspeccion N:" + inspeccion.getId() + " para el Sr: " + inspeccion.getIdCliente().getNombre() + " con el Servicio[" + inspeccion.getIdServicio().getCodigoServicio() + "]");
            limpiar_formulario();

        } catch (PreexistingEntityException ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.refrescar_lista();
    }

    private void limpiar_adjuntos() {
        Utilidades.eliminar_archivos_temp(Utilidades.getSessionID());
        if (tempuploadlist != null) {
            tempuploadlist.clear();
        }

    }

    public void eliminar_adjunto(ActionEvent evt) {
        Object obj = evt.getComponent().getAttributes().get("tupla_archivo");
        try {
            if (obj instanceof ResourceBean) {
                ResourceBean dato = ((ResourceBean) obj);
                File archivo = new File(dato.getTemporal().getRuta());
                archivo.delete();
                tempupload.destroy(dato.getTemporal().getId());
                //Actualizar la Lista
                tempuploadlist.remove(dato);
            }
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception e) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, "OEEEEEEEEEEEEEEEE", e);
        }
    }

    public void abrir_ventana_prop(ActionEvent evt) {
        Inspeccion codigo_isp = (Inspeccion) evt.getComponent().getAttributes().get("id_inspeccion");
        if (codigo_isp == null) {
            return;
        }

        ventana.setPopup_header("Informacion del de la Inspeccion [" + codigo_isp.getId().toString() + "]");
        ventana.setPopup_conten(showInfoHTML(codigo_isp));
        ventana.setPopup_visible(true);
    }

    public void buscar_e(ActionEvent evt) {
        FacesContext context = FacesContext.getCurrentInstance();
        //HtmlInputText text_inpt=(HtmlInputText)context.getViewRoot().findComponent("form_sistema:txt_busca");
        if (criterio.isEmpty()) {
            JavascriptContext.fireEffect(new Highlight("#ffcc99"), "form_sistema:txt_busca", context);
            FacesMessage msg = new FacesMessage("* El campo esta vacio");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage("form_sistema:txt_busca", msg);
            JavascriptContext.applicationFocus(context, "form_sistema:txt_busca");
            return;
        }
        //Limpiar la lista de Inpencciones
        lista.clear();
        //Empezar a buscar el dato en tabla de inspecciones por el criterio que determine el cliente
        switch (this.opt_busqueda) {
            case codigo_inspeccion:
                //validar que sea un numero
                if (!Pattern.matches("\\d*", criterio)) {
                    JavascriptContext.fireEffect(new Highlight("#ffcc99"), "form_sistema:txt_busca", context);
                    FacesMessage msg = new FacesMessage("* Campo debe ser solo numero Ej: 1234");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage("form_sistema:txt_busca", msg);
                    JavascriptContext.applicationFocus(context, "form_sistema:txt_busca");
                    break;
                }
                Inspeccion inspeccion = inspeccionjpa.findInspeccion(Integer.valueOf(criterio));
                lista.clear();
                lista.add(new Object[]{inspeccion, new AgenciaJpaController().findAgencia(inspeccion.getIdAgencia())});

                break;
            case nombre_cliente:
                //no Valida nada
                List<Cliente> ins_by_cli = clijpa.getEntityManager().createNamedQuery("Cliente.findByNombre").setParameter("nombre", "%" + criterio.toUpperCase() + "%").getResultList();
                for (Iterator it = ins_by_cli.iterator(); it.hasNext();) {
                    Cliente object = (Cliente) it.next();
                    for (Inspeccion ispln : object.getInspeccionCollection()) {
                        lista.add(new Object[]{ispln, new AgenciaJpaController().findAgencia(ispln.getIdAgencia())});
                    }
                }
                break;
            case cedula_ruc:
                //Validar solo numeros
                if (!Pattern.matches("\\d*", criterio)) {
                    JavascriptContext.fireEffect(new Highlight("#ffcc99"), "form_sistema:txt_busca", context);
                    FacesMessage msg = new FacesMessage("* Campo debe ser solo Numeros Ej: 1234");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage("form_sistema:txt_busca", msg);
                    JavascriptContext.applicationFocus(context, "form_sistema:txt_busca");
                    break;
                }
                List<Cliente> ins_by_ced = clijpa.getEntityManager().createNamedQuery("Cliente.findByCedularuc").setParameter("cedularuc", "%" + criterio.toUpperCase() + "%").getResultList();
                if (ins_by_ced.size() == 0) {
                    JavascriptContext.fireEffect(new Highlight("#ffcc99"), "form_sistema:txt_busca", context);
                    FacesMessage msg = new FacesMessage("* No se encontro datos con el criterio: " + criterio.toUpperCase());
                    msg.setSeverity(FacesMessage.SEVERITY_INFO);
                    context.addMessage("form_sistema:txt_busca", msg);
                    JavascriptContext.applicationFocus(context, "form_sistema:txt_busca");
                    lista = obtener_lista(0, 0);
                    break;
                }
                for (Iterator it = ins_by_ced.iterator(); it.hasNext();) {
                    Cliente object = (Cliente) it.next();
                    lista.clear();
                    for (Inspeccion ispln : object.getInspeccionCollection()) {
                        lista.add(new Object[]{ispln, new AgenciaJpaController().findAgencia(ispln.getIdAgencia())});
                    }
                }
                if (lista.size() == 0) {
                    FacesMessage message = new FacesMessage();
                    message.setSeverity(FacesMessage.SEVERITY_ERROR);
                    message.setSummary("No se encontraron Inspecciones con el criterio " + criterio);
                    message.setDetail("No se encontraron Inspecciones con el criterio " + criterio);
                    context.addMessage("form_sistema:txt_busca", message);
                }
                break;
            case codigo_servicio:
                // Validar por codigo de servcio solo numeros
                if (!Pattern.matches("\\d*", criterio)) {
                    JavascriptContext.fireEffect(new Highlight("#ffcc99"), "form_sistema:txt_busca", context);
                    FacesMessage msg = new FacesMessage("* Campo debe ser solo Numeros Ej: 1234");
                    msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                    context.addMessage("form_sistema:txt_busca", msg);
                    JavascriptContext.applicationFocus(context, "form_sistema:txt_busca");
                    break;
                }
                Integer cod_serv = new Integer(criterio);
                //Cargar las inspecciones que posean el servcio que corresponde
                //lista.addAll(servjpa.findServicio(cod_serv).getInspeccionCollection());

                lista.clear();
                Servicio srv = (Servicio) servjpa.getEntityManager().createNamedQuery("Servicio.findByCodigoServicio").setParameter("codigoServicio", cod_serv).getSingleResult();
                if (srv.getInspeccionCollection().size() == 0) {
                    FacesMessage message = new FacesMessage();
                    message.setSeverity(FacesMessage.SEVERITY_ERROR);
                    message.setSummary("No se encontraron Inspecciones con el criterio " + criterio);
                    message.setDetail("No se encontraron Inspecciones con el criterio " + criterio);
                    context.addMessage("form_sistema:txt_busca", message);
                }
                for (Inspeccion ispln : srv.getInspeccionCollection()) {
                    lista.add(new Object[]{ispln, new AgenciaJpaController().findAgencia(ispln.getIdAgencia())});
                }
                break;
            default:
                JavascriptContext.fireEffect(new Highlight("#ffcc99"), "form_sistema:txt_busca", context);
                FacesMessage msg = new FacesMessage("* No se encontro datos con el criterio: " + criterio.toUpperCase());
                msg.setSeverity(FacesMessage.SEVERITY_INFO);
                context.addMessage("form_sistema:txt_busca", msg);
                JavascriptContext.applicationFocus(context, "form_sistema:txt_busca");
                lista = obtener_lista(0, 0);
                break;
        }
        if (lista.size() == 0) {
            FacesMessage message = new FacesMessage();
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary("No se encontraron Inspecciones con el criterio " + criterio);
            message.setDetail("No se encontraron Inspecciones con el criterio " + criterio);
            context.addMessage("form_sistema:txt_busca", message);
        }
        //Limpiar mensjaes por si las moscas....
        context.renderResponse();
    }
    private String idinspeccion;

    public String getIdinspeccion() {
        return idinspeccion;
    }

    public void setIdinspeccion(String idinspeccion) {
        this.idinspeccion = idinspeccion;
    }

    public void editar(ActionEvent evt) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        insp_selected =
                (Inspeccion) evt.getComponent().getAttributes().get("inspeccion");


        editInspeccionBakenBean ei = (editInspeccionBakenBean) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "editInspeccionBakenBean");
        ei.setInspeccion_editar(insp_selected);
        ei.adj.clear();
        ei.getAdjuntos().clear();
//        for(int i=0;i<ei.getAdjuntos().size();i++){
//            ei.getAdjuntos().remove(i);
//        }
        ei.adj.addAll(insp_selected.getAdjuntosCollection());
        getNav().setOpcion(insp_selected.getId().toString());
        getNav().setPagina_contenido("inspecciones/editform.jspx");
        //this.idinspeccion = codigo_isp.getId().toString();


    }

    public void borrar(ActionEvent evt) {

        insp_selected = (Inspeccion) evt.getComponent().getAttributes().get("inspeccion");
        getVentana().setPopup_header("Advertencia");
        getVentana().setPopup_conten("¿Esta Seguro de eliminar el la inspeccion...?");
        getVentana().setTipo_ventana(eventosBakenBean.ACEPTAR_CANCELAR);
        getVentana().setPopup_visible(true);
        getVentana().limpiar_listener();
        getVentana().getBtn_1().addActionListener(new ActionListener() {

            public void processAction(ActionEvent evt) throws AbortProcessingException {
                try {
                    //eliminar los adjuntos
                    for (Adjuntos adj : insp_selected.getAdjuntosCollection()) {
                        File archivo = new File(adj.getNombre());
                        if (archivo.exists()) {
                            archivo.delete();
                        }

                        adjuntosjpa.destroy(adj.getId());
                    }
//Eliminar la inspeccion...

                    inspeccionjpa.destroy(insp_selected.getId());
                    setLista(obtener_lista(0, 0));

                } catch (IllegalOrphanException ex) {
                    Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NonexistentEntityException ex) {
                    Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });

    }

    public void cancelar_edicion(ActionEvent evt) {
        getNav().setPagina_contenido("indicadores/indicadores.jspx");
    }

    public void cancelar(ActionEvent evt) {
        try {
            limpiar_formulario();
            //limpiar_adjuntos();
            //tempuploadlist.clear();
        } catch (Exception ex) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        if (edit) {
            getNav().setPagina_contenido("inspecciones/editInspeccion.jspx");
            edit =
                    false;
        } else {
            getNav().setPagina_contenido("indicadores/indicadores.jspx");
        }

    }

    private String showInfoHTML(Inspeccion insp) {
        StringBuilder sb = new StringBuilder();
        sb.append("<div id='inps_view'>");
        sb.append("<fieldset id=\"frm_dat_cliente\">");
        sb.append("<legend>Datos del Cliente</legend>");
        sb.append("<div style=\"float: right;\" id=\"form_sistema:j_id295\" class=\"icePnlGrp\">");
        sb.append("<table id=\"form_sistema:form_dat_servicio\" class=\"icePnlGrd\">");
        sb.append("<tbody>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td id=\"form_sistema:form_dat_servicio-0-0\" class=\"icePnlGrdCol1\"><label id=\"form_sistema:j_id298\" for=\"form_sistema:txt_cod_servicio\" class=\"iceOutLbl etiqueta\">Codigo Servicio</label></td>");
        sb.append("<td id=\"form_sistema:form_dat_servicio-0-1\" class=\"icePnlGrdCol2\"><input type=\"text\" readonly=\"true\" name=\"form_sistema:txt_cod_servicio\" value=\"" + insp.getIdServicio().getCodigoServicio() + "\" id=\"form_sistema:txt_cod_servicio\" class=\"iceInpTxt\" /></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow2\">");
        sb.append("<td id=\"form_sistema:form_dat_servicio-1-0\" class=\"icePnlGrdCol1\">");
        sb.append("<label id=\"form_sistema:j_id300\" for=\"form_sistema:txt_det_servicio\" class=\"iceOutLbl etiqueta\">Detalle del Servicio</label>");
        sb.append("</td>");
        sb.append("<td id=\"form_sistema:form_dat_servicio-1-1\" class=\"icePnlGrdCol2\">");
        sb.append("<input type=\"text\" value=\"" + insp.getIdServicio().getDetalleServicio() + "\" size=\"60\" readonly=\"true\" name=\"form_sistema:txt_det_servicio\" id=\"form_sistema:txt_det_servicio\" class=\"iceInpTxt\" />");
        sb.append("</td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td id=\"form_sistema:form_dat_servicio-2-0\" class=\"icePnlGrdCol1\">");
        sb.append("<label id=\"form_sistema:j_id302\" for=\"form_sistema:txt_tip_servicio\" class=\"iceOutLbl etiqueta\">Tipo de Servicio</label>");
        sb.append("</td>");
        sb.append("<td id=\"form_sistema:form_dat_servicio-2-1\" class=\"icePnlGrdCol2\">");
        sb.append("<input type=\"text\" value=\"" + insp.getIdServicio().getIdTipoServicio().getDetalle() + "\" readonly=\"true\" name=\"form_sistema:txt_tip_servicio\" id=\"form_sistema:txt_tip_servicio\" class=\"iceInpTxt\"></td>");
        sb.append("</tr>");
        sb.append("</tbody>");
        sb.append("</table>");
        sb.append("<table id=\"form_sistema:form_dat_cliente\" class=\"icePnlGrd\">");
        sb.append("<tbody>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td id=\"form_sistema:form_dat_cliente-0-0\" class=\"icePnlGrdCol1\"><label id=\"form_sistema:j_id304\" for=\"form_sistema:txt_nombres\" class=\"iceOutLbl etiqueta\">Nombres</label></td>");
        sb.append("<td id=\"form_sistema:form_dat_cliente-0-1\" class=\"icePnlGrdCol2\"><input type=\"text\" value=\"" + insp.getIdCliente().getNombre() + "\" size=\"60\" readonly=\"true\"  name=\"form_sistema:txt_nombres\" id=\"form_sistema:txt_nombres\" class=\"iceInpTxt\"></td>");
        sb.append("<td id=\"form_sistema:form_dat_cliente-0-2\" class=\"icePnlGrdCol1\"><label id=\"form_sistema:j_id306\" for=\"form_sistema:txt_ciudad\" class=\"iceOutLbl etiqueta\">Ciudad</label></td>");
        sb.append("<td id=\"form_sistema:form_dat_cliente-0-3\" class=\"icePnlGrdCol2\"><input type=\"text\" value=\"" + new CiudadJpaController().findCiudad(insp.getIdCliente().getIdCiudad()).getNombre() + "\" size=\"60\" readonly=\"true\"  name=\"form_sistema:txt_ciudad\" id=\"form_sistema:txt_ciudad\" class=\"iceInpTxt\"></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow2\">");
        sb.append("<td id=\"form_sistema:form_dat_cliente-1-0\" class=\"icePnlGrdCol1\"><label id=\"form_sistema:j_id308\" for=\"form_sistema:txt_cedula\" class=\"iceOutLbl etiqueta\">Cedula</label></td>");
        sb.append("<td id=\"form_sistema:form_dat_cliente-1-1\" class=\"icePnlGrdCol2\"><input type=\"text\" value=\"" + insp.getIdCliente().getCedularuc() + "\" size=\"60\" readonly=\"true\"  name=\"form_sistema:txt_cedula\" id=\"form_sistema:txt_cedula\" class=\"iceInpTxt\"></td>");
        sb.append("<td id=\"form_sistema:form_dat_cliente-1-2\" class=\"icePnlGrdCol1\"><label id=\"form_sistema:j_id310\" for=\"form_sistema:txt_direccion\" class=\"iceOutLbl etiqueta\">Direccion</label></td>");
        sb.append("<td id=\"form_sistema:form_dat_cliente-1-3\" class=\"icePnlGrdCol2\"><input type=\"text\" value=\"" + insp.getIdCliente().getDireccion() + "\" size=\"60\" readonly=\"true\"  name=\"form_sistema:txt_direccion\" id=\"form_sistema:txt_direccion\" class=\"iceInpTxt\"></td>");
        sb.append("</tr>");
        sb.append("</tbody>");
        sb.append("</table>");
        sb.append("</fieldset>");

        sb.append("<fieldset id=\"frm_dat_inspeccion\">");
        sb.append("<legend>Datos de la Inspeccion</legend>");
        sb.append("<table class=\"icePnlGrd\">");
        sb.append("<tbody>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td class=\"icePnlGrdCol1\"><table class=\"icePnlGrd\">");
        sb.append("<tbody>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td class=\"icePnlGrdCol1\"><label class=\"iceOutLbl\">Fecha Inspeccion</label></td>");
        sb.append("<td class=\"icePnlGrdCol2\"><div class=\"iceSelInpDatePopup\">");
        sb.append("<input type=\"text\" style=\"background-color:#F6F6F6\" value=\"" + new SimpleDateFormat("d/MM/yyyy").format(insp.getFechaInspeccion()) + "\" readonly=\"true\" class=\"iceInpTxt\"/>");
        sb.append("</div></td>");
        sb.append("<td class=\"icePnlGrdCol1\"><span></span></td>");
        sb.append("</tr>");
        sb.append("</tbody>");
        sb.append("</table></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow2\">");
        sb.append("<td class=\"icePnlGrdCol1\"><table class=\"icePnlGrd\">");
        sb.append("<tbody>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Inspector</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getIdInspector().getNombres() + "\" readonly=\"true\" class=\"iceInpTxt\"/>");
        sb.append("</td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Agencia</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + new AgenciaJpaController().findAgencia(insp.getIdAgencia()).getNombre() + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow2\">");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Motivo</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getIdMotivo().getDescripcion() + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Novedad</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getIdNovedad().getDescripcion() + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Campo</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getIdCampo().getDescripcion() + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Liquidador</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getIdLiquidador().getDescripcion() + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow2\">");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Sello Encontro</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getSelloEncontro() + "\" readonly=\"true\" class=\"iceInpTxt\"></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Sello Dejo</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + insp.getSelloDejo() + "\" readonly=\"true\" class=\"iceInpTxt\"></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow1\" >");

        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Recuperacion Neta</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + NumberFormat.getCurrencyInstance(Locale.US).format(insp.getRecuNeta()) + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><label class=\"iceOutLbl etiqueta\">Recuperacion Acumulada</label></td>");
        sb.append("<td class=\"icePnlGrdCol normal\"><input style=\"background-color:#F6F6F6\" type=\"text\" value=\"" + NumberFormat.getCurrencyInstance(Locale.US).format(insp.getRecuAcumulada()) + "\" readonly=\"true\" class=\"iceInpTxt\" /></td>");
        sb.append("</tr>");
        sb.append("</tbody>");
        sb.append("</table></td>");
        sb.append("</tr>");
        sb.append("<tr class=\"icePnlGrdRow1\">");
        sb.append("<td class=\"icePnlGrdCol1\"><table class=\"icePnlGrd\">");
        sb.append("<tbody>");
        sb.append("<tr class=\"icePnlGrdRow1\">");

        sb.append("<td class=\"icePnlGrdCol arriba\"><label class=\"iceOutLbl etiqueta\">Observacion</label></td>");
        sb.append("<td class=\"icePnlGrdCol arriba\"><textarea style=\"background-color:#F6F6F6\" rows=\"4\" readonly=\"true\" cols=\"120\" class=\"iceInpTxtArea mayusculas\">" + insp.getObservaciones() + "</textarea></td>");
        sb.append("<td class=\"icePnlGrdCol arriba\"></td>");
        sb.append("</tr>");
        sb.append("</tbody>");
        sb.append("</table></td>");
        sb.append("</tr>");
        sb.append("</tbody>");
        sb.append("</table>");
        sb.append("</fieldset>");

        sb.append("</div>");
        return sb.toString();
    }
}
